<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/8/5
 * Time: 11:36
 */

namespace app\common\model;



use think\exception\HttpException;

class Out
{
    /**
     * 返回加密的输出结果,只能在控制器中的方法中使用
     * @param $result
     * @param string $msg
     * @param array $data
     * @return array|string
     * @throws \Exception
     */
    static public function json($result,$msg='',$data=[]){
        if(is_array($result)){
            $data=$result;
            Log::record(self::json_encode($data),'OUTPUT');

            if(isset(Input::$crypt)&&Input::$crypt=='miyu'){
                $inputData=Input::getAll();
                if(isset($data['data'])){
                    $data['data']= Crypt::encrypt(self::json_encode($data['data']),Crypt::$key);
                }
                $input=$inputData;
            }else{
                $input=input();
            }


            $debug=isset($input['echo'])?$input['echo']:'';
            if($debug==1){
                $data['INPUT']=$input;
            }
            if(request()->isAjax()){
                return $data;
            }else{
                return self::json_encode($data);
            }

        }else{
            Log::record(self::json_encode(['result'=>$result,'msg'=>$msg,'data'=>$data]),'OUTPUT');
            $ret['result']=$result;
            $ret['msg']=$msg;

            if(isset(Input::$crypt)&&Input::$crypt=='miyu'){
                $inputData=Input::getAll();
                if(!empty($data)){
                    $ret['data']= Crypt::encrypt(self::json_encode($data),Crypt::$key);
                }
                $input=$inputData;
            }else{
                $ret['data']=$data;
                $input=input();
            }


            $debug=isset($input['echo'])?$input['echo']:'';
            if($debug==1){
                $ret['INPUT']=$input;
            }
            $data=self::json_encode($ret);
            if(request()->isAjax()){
                return $ret;
            }
            return $data;
        }



    }



    /**
     * 返回失败提示,只能在控制器中的方法中使用
     * @param $msg
     * @return string
     */
    static public function error($msg){
        $data['result']=0;
        $data['msg']=$msg;
        Log::record(self::json_encode($data),'OUTPUT');

        $input=Input::getAll();
        $debug=isset($input['echo'])?$input['echo']:'';
        if($debug==1){
            unset($input['key']);
            $data['INPUT']=$input;
        }
        if(request()->isAjax()){
            return $data;
        }
        return self::json_encode($data);
    }

    /**
     * 返回成功提示,只能在控制器中的方法中使用
     * @param string $msg
     * @return string
     */
    static public function success($msg='成功'){
        $data['result']=1;
        $data['msg']=$msg;
        Log::record(self::json_encode($data),'OUTPUT');
        $input=Input::getAll();
        $debug=isset($input['echo'])?$input['echo']:'';
        if($debug==1){
            unset($input['key']);
            $data['INPUT']=$input;
        }
        if(request()->isAjax()){
            return $data;
        }
        return self::json_encode($data);
    }

    /**
     * 抛出异常,可以在任意地方使用
     * @param $msg
     */
    static public function exception($msg){
        throw new HttpException(200,$msg);
    }

    static public function json_encode($array){
        $data= json_encode($array,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
        return (string)$data;
    }

}